package com.ydgg.ltar.util;

import java.util.List;

import com.ydgg.ltar.model.AreaList;
import com.ydgg.ltar.model.Point;

public class GisUtil {
	
	public boolean getRange(List<AreaList> list,double x,double y) {

		Point[] ps1 = new Point[list.size()];
		for(int i = 0 ; i < list.size() ; i ++){
			ps1[i] = new Point(Double.parseDouble(list.get(i).getLng()),Double.parseDouble(list.get(i).getLat()));
		}
		return isPtInPoly(x , y, ps1);
	}
	

	public boolean isPtInPoly (double ALon , double ALat , Point[] ps) {
		int iSum, iCount, iIndex;
		double dLon1 = 0, dLon2 = 0, dLat1 = 0, dLat2 = 0, dLon;
		if (ps.length < 3) {
			return false;
		}
		iSum = 0;
		iCount = ps.length;
		for (iIndex = 0; iIndex<iCount;iIndex++) {
			if (iIndex == iCount - 1) {
				dLon1 = ps[iIndex].getX();
				dLat1 = ps[iIndex].getY();
				dLon2 = ps[0].getX();
				dLat2 = ps[0].getY();
			} else {
				dLon1 = ps[iIndex].getX();
				dLat1 = ps[iIndex].getY();
				dLon2 = ps[iIndex + 1].getX();
				dLat2 = ps[iIndex + 1].getY();
			}
			// 以下语句判断A点是否在边的两端点的水平平行线之间，在则可能有交点，开始判断交点是否在左射线上
			if (((ALat >= dLat1) && (ALat < dLat2)) || ((ALat >= dLat2) && (ALat < dLat1))) {
				if (Math.abs(dLat1 - dLat2) > 0) {
					//得到 A点向左射线与边的交点的x坐标：
					dLon = dLon1 - ((dLon1 - dLon2) * (dLat1 - ALat) ) / (dLat1 - dLat2);
					// 如果交点在A点左侧（说明是做射线与 边的交点），则射线与边的全部交点数加一：
					if (dLon < ALon) {
						iSum++;
					}
				}
			}
		}
		if ((iSum % 2) != 0) {
			return true;
		}
		return false;
	}
}
